/**
 * 递归处理对象/数组中字符串参数的前后空格，支持深度控制
 * @param data 输入数据 (对象/数组/值)
 * @param maxDepth 最大递归深度 (默认10层)
 * @returns 处理后的数据 (保持原有结构)
 */
function trimStringParams<T>(data: T, maxDepth: number = 10): T {
  // 深度耗尽或基础类型直接返回
  if (maxDepth < 0 || data == null || typeof data !== 'object') {
    return typeof data === 'string' ? data.trim() as T : data;
  }

  // 处理数组
  if (Array.isArray(data)) {
    return data.map(item => trimStringParams(item, maxDepth - 1)) as T;
  }

  // 处理普通对象
  if (Object.prototype.toString.call(data) === '[object Object]') {
    return Object.entries(data).reduce((acc, [key, value]) => {
      acc[key as keyof T] = trimStringParams(value, maxDepth - 1);
      return acc;
    }, {} as T);
  }

  // 其他对象类型 (如Date等) 直接返回
  return data;
}

export {
  trimStringParams
}
